package controlador;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import datos.AccionesCliente;
import datos.AccionesMarca;
import datos.AccionesProducto;
import datos.AccionesProveedor;
import datos.AccionesRegistroPago;
import datos.AccionesUsuario;
import datos.AccionesVenta;
import datos.Cliente;
import datos.RegistroPago;
import datos.Usuario;

/**
 * Servlet implementation class EditarCliente
 */
public class EditarCliente extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public EditarCliente() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	//Tira error porque tiene asociada una venta al idCliente, borrar en cascada o agregar mensaje de error
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		HttpSession sesion = request.getSession();
		String user = (String) sesion.getAttribute("user");
		String pass = (String) sesion.getAttribute("pass");
		Usuario u = new Usuario(user, pass);
		String r = AccionesUsuario.reemplazar(this.getClass().getSimpleName());
		if(AccionesUsuario.validarUsuario(u)){
			if(AccionesUsuario.validarPermiso(u, r)){
			int idCliente=Integer.parseInt(request.getParameter("idCliente"));
			if(AccionesVenta.existsClienteVenta(idCliente)){
				sesion.setAttribute("errorClienteVenta", true);
				response.sendRedirect("clientes.jsp");
			}else{
				sesion.setAttribute("errorClienteVenta", false);
			AccionesCliente.deleteCliente(idCliente);
			response.sendRedirect("clientes.jsp");
			}
			}else{
				response.sendRedirect("index.jsp");
			}
		} else {
			response.sendRedirect("login.jsp");
		}

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	// Arreglar para que funcione si fechaNac es null
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		HttpSession sesion = request.getSession();
		String user = (String) sesion.getAttribute("user");
		String pass = (String) sesion.getAttribute("pass");
		Usuario u = new Usuario(user, pass);
		String r = AccionesUsuario.reemplazar(this.getClass().getSimpleName());
		if(AccionesUsuario.validarUsuario(u)){
			if(AccionesUsuario.validarPermiso(u, r)){
			String submit = request.getParameter("submit");
			if (submit.equals("Aceptar")) {
				int idCliente=Integer.parseInt(request.getParameter("idCliente"));
				String nombre = request.getParameter("nombreCliente");
				String apellido = request.getParameter("apellidoCliente");
				String localidad = request.getParameter("localidad");
				String direccion = request.getParameter("direccion");
				String ocupacion = request.getParameter("ocupacion");
				String fechaNac = request.getParameter("fechaNac");
				Date fechaNacimiento = null;
				if(!fechaNac.equals("") && !fechaNac.equals(null)){
				try{
				SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
				fechaNacimiento=formatter.parse(fechaNac);
				}catch(Exception e){
					e.printStackTrace();
				}
				}

				Cliente c = new Cliente(nombre, apellido, localidad, direccion,
						ocupacion, fechaNacimiento);
				c.setIdCliente(idCliente);
				if(AccionesCliente.existeCliente(idCliente)){
					sesion.setAttribute("errorCliente", true);
					sesion.setAttribute("nombreCliente", nombre);
					sesion.setAttribute("apellidoCliente", apellido);
					sesion.setAttribute("localidadCliente", localidad);
					sesion.setAttribute("direccionCliente", direccion);
					sesion.setAttribute("ocupacionCliente", ocupacion);
					sesion.setAttribute("fechaNacCliente", fechaNac);
					response.sendRedirect("altaCliente.jsp");
				}else{
				AccionesCliente.addCliente(c);
				sesion.setAttribute("errorCliente", false);
				response.sendRedirect("altaCliente.jsp");
				}
			} else if (submit.equals("Modificar")) {
				int idCliente = Integer.parseInt(request.getParameter("idCliente"));
				String nombre = request.getParameter("nombreCliente");
				String apellido = request.getParameter("apellidoCliente");
				String localidad = request.getParameter("localidad");
				String direccion = request.getParameter("direccion");
				String ocupacion = request.getParameter("ocupacion");
				String fechaNac = request.getParameter("fechaNac");
				Date fechaNacimiento = null;
				if(!fechaNac.equals("") && !fechaNac.equals(null)){
				try{
				SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
				fechaNacimiento=formatter.parse(fechaNac);
				}catch(Exception e){
					e.printStackTrace();
				}
				}
			/*	if(localidad == null){
					localidad = "";
				}
				if(direccion == null){
					direccion = "";
				}
				if(ocupacion == null){
					ocupacion = "";
				}
				*/

				Cliente c = new Cliente(nombre, apellido, localidad, direccion,
						ocupacion, fechaNacimiento);
				c.setIdCliente(idCliente);
				AccionesCliente.updateCliente(c);
				response.sendRedirect("clientes.jsp");
			}else if(submit.equals("Pagar")){
				int idCliente = Integer.parseInt(request.getParameter("idCliente"));
				int idTipoPago = Integer.parseInt(request.getParameter("idTipoPago"));
				Cliente c = AccionesCliente.getClienteById(idCliente);
				double saldo = c.getSaldo();
				double monto = Double.parseDouble(request.getParameter("monto"));
				String concepto=request.getParameter("concepto");
				c.setSaldo(saldo - monto);
				RegistroPago rp = new RegistroPago(idCliente, idTipoPago, monto, null, concepto);
				rp.setSaldoAnterior(saldo);
				AccionesRegistroPago.addRegistroPago(rp);
				AccionesCliente.updateCliente(c);
				sesion.setAttribute("redireccionServletPago", true);
				response.sendRedirect("detalleCuenta.jsp");
			}

			}else{
				response.sendRedirect("index.jsp");
			}
		} else {
			response.sendRedirect("login.jsp");
		}

	}

}
